package com.zf.proxy.cglib.interfaces;

import net.sf.cglib.core.DebuggingClassWriter;
import net.sf.cglib.proxy.Enhancer;

/**
 * cglib使用接口代理，和jdk动态代理类似
 *
 * @author Zhou Feng
 */
public class TestCGInterMain {
    public static void main(String[] args) {
        // 设置这个变量后，Cglib会把Cglib动态代理生成的类写入到“指定的目录/全类名目录”，不设置则不写入
        System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, System.getProperty("user.dir") + "\\cglib");

        Enhancer enhancer = new Enhancer();
        //设置被代理类的类加载器
        enhancer.setClassLoader(CgInterA.class.getClassLoader());
        //设置被代理类的接口
        enhancer.setInterfaces(CgInterA.class.getInterfaces());
        //设置回调，传入被代理类的对象
        enhancer.setCallback(new CgInterAInvoker(new CgInterA()));
        //生成代理对象
        CgInterIA cgInterIAProxy = (CgInterIA) enhancer.create();
        System.out.println(cgInterIAProxy.hello("顶顶顶"));
    }
}
